import axiosInstance from '@/utils/request'

/**
 * 购物车服务API
 */
export const cartApi = {
  /**
   * 添加商品到购物车
   * @param {Object} cartDTO 购物车数据
   * @param {number} cartDTO.userId 用户ID
   * @param {number} cartDTO.productId 商品ID
   * @param {number} cartDTO.quantity 商品数量
   * @returns {Promise} 请求Promise
   */
  addToCart(CartDTO) {
    return axiosInstance.post('/product/cart/add', CartDTO)
  },

  /**
   * 从购物车移除商品
   * @param {number} cartId 购物车项ID
   * @returns {Promise} 请求Promise
   */
  removeFromCart(cartId) {
    // 参数验证
    const id = Number(cartId);
    if (isNaN(id) || id <= 0) {
      return Promise.reject(new Error(`无效的购物车ID: ${cartId}`));
    }

    return axiosInstance.delete(`/product/cart/${cartId}`)
      .then(response => {
        // 可以根据后端返回的数据结构进行额外处理
        return response;
      })
      .catch(error => {
        // 统一错误处理
        console.error('移除购物车商品失败:', error);
        throw error;
      });
  },

  /**
   * 根据用户ID获取购物车列表
   * @param {number} userId 用户ID
   * @returns {Promise} 请求Promise
   */
  getCartByUserId(userId) {
    return axiosInstance.get(`/product/cart/user/${userId}`)
  },

  /**
 * 更新购物车商品数量
 * @param {number} cartId 购物车项ID
 * @param {number} quantity 变化量（+1表示增加，-1表示减少）或绝对数量
 * @param {boolean} [isDelta=true] 是否为增量模式
 * @returns {Promise} 请求Promise
 */
updateCartQuantity(cartId, quantity, isDelta = true) {
  // 参数验证
  const qty = Number(quantity);
  if (isNaN(qty)) {
    return Promise.reject(new Error(`无效的数量值: ${quantity}`));
  }

  // 构建请求数据
  const requestData = isDelta
    ? { delta: qty }  // 增量模式
    : { quantity: qty }; // 绝对数量模式

  return axiosInstance.put(`/product/cart/${cartId}`,
    requestData,
    {
      headers: {
        'Content-Type': 'application/json'
      }
    }
  ).then(response => {
    // 处理数量减到0被删除的情况
    if (response.code === 1 && response.data === null) {
      return { ...response, isDeleted: true };
    }
    return response;
  });
 }
}

